/**
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2007，所有权利保留。
 * 
 * 项目名：	rumba
 * 文件名：	QEntryLinkReader.java
 * 模块说明：	
 * 修改历史：
 * Dec 19, 2007 - lxm - 创建。
 */
package com.hd123.rumba.gwt.entry.server.entry;

import com.hd123.rumba.cartridge.entry.EntryLink;
import com.hd123.rumba.cartridge.entry.EntryLinkStyle;
import com.hd123.rumba.exception.BusinessException;
import com.hd123.rumba.gwt.entry.client.entry.QEntryLink;
import com.hd123.rumba.request.GWTModuleDispatcher;
import com.hd123.rumba.request.JspLib;
import com.hd123.rumba.util.ObjectUtil;

/**
 * 模块功能入口链接 | 业务层 | 实体
 * 
 * @see com.hd123.rumba.gwt.entry.client.entry.QEntryLink
 * @author lxm
 * 
 */
public class QEntryLinkReader {

  /**
   * 从指定的持久层对象读取数据到通过{@link #setTarget()}所指定的作为目标的业务层对象。
   * 
   * @param source
   *          指定的持久层对象，作为赋值的源。不可为null。
   * @throws ClientBizException
   */
  public void read(EntryLink source) throws BusinessException {
    ObjectUtil.checkParameterNotNull(source, "source");
    if (target == null)
      throw new BusinessException("属性target不可为null。");
    assert source.getUrl() != null;
    if (source.getStyle().equals(EntryLinkStyle.action))
      target.setUrl(JspLib.getAction(source.getUrl()));
    else if (source.getStyle().equals(EntryLinkStyle.gwtModule))
      target.setUrl(GWTModuleDispatcher.getInstance().getModuleURL(source.getUrl()));
    else
      target.setUrl(source.getUrl());
    target.setTarget(source.getTarget());
  }

  private QEntryLink target;

  /** 当前作为赋值目标的业务层对象。 */
  public QEntryLink getTarget() {
    return target;
  }

  /** 当前作为赋值目标的业务层对象。 */
  public void setTarget(QEntryLink target) {
    this.target = target;
  }

}
